<?php
/**
 * 处理基本的元数据，包括tag、及att属性(top、bold、recommend、slide、roll、jump)
 */
class PostMetaModel extends Model {
    protected $fields=array(
        'id','post','model','meta','value',
        '_pk'=>'id',
        '_autoInc'=>true
    );

    protected $att=array(
        'top'=>'置顶',
        'bold'=>'加粗',
        'recommend'=>'推荐',
        'roll'=>'滚动',
        'slide'=>'幻灯'
    );

    private $model;
    private $postMetaConfigs;

    public function _initialize() {
        /**
        $this->postMetaConfigs=include CONFIG_PATH.'PostMeta.php';
        //检查是否定义了模型
        if( array_key_exists('model', $_POST) && array_key_exists($_POST['postModel'], $this->postMetaConfigs['postmodel']) ) {
            $postModel=$_POST['model'];
            //引入模型文件
            $filepath=LIB_PATH.'PostModel/'.$postModel.'Model.class.php';
            if(is_file($filepath)) {
                require $filepath;
                $className=$postModel.'Model';
                $this->model=new $className();
                return;
            }
        }
        $this->model=false;
        **/
    }

    /**
     * 在保存文档对内容进行处理，返回的值将与要保存到数据库中的值进行合并
     */
    public function beforeSave($baseVo) {
        $ret=array();
        if($this->model) {
            $ret=$this->model->beforeSave($baseVo);
        }
        return $ret;
    }

    /**
     * 保存文档后，对文档进行处理
     */
    public function afterSave($baseVo) {
        $this->startTrans();
        $data=array();
        //对Tag进行处理
        if(array_key_exists('tag', $_POST)){
            $tags=split(',', trim($_POST['tag']));
            foreach($tags as $tag){
                $data[]=array(
                    'post'=>$baseVo['id'],
                    'meta'=>'tag',
                    'value'=>$tag
                );
            }
        }
        //对文档属性进行处理
        if(array_key_exists('att',$_POST)) {
            $atts=$_POST['att'];
            foreach($atts as $att) {
                if(array_key_exists($att,$this->att)) {
                    $data[]=array(
                        'post'=>$baseVo['id'],
                        'meta'=>$att,
                        'value'=>'y'
                    );
                }
            }
        }
        //调用文档模型的方法
        if($this->model) {
            $data=array_merge($data, $this->model->afterSave($baseVo,$this));
        }
        //数据库操作 TODO 此处要确定下这些方法的确切返回值
        if(count($data)>0 && false!==$this->deleteAll('post='.$baseVo['id']) && false!==$this->addAll($data) ){
            $this->commit();
            return true;
        }
        $this->rollback();
        return false;
    }

    public function beforeEdit($baseVo){
        return null;
    }
}